package com.school.sports.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.school.sports.entity.SystemConfig;

import java.util.List;
import java.util.Map;

/**
 * 系统配置服务接口
 */
public interface SystemConfigService extends IService<SystemConfig> {

    /**
     * 分页查询系统配置列表
     * @param currentPage 当前页码
     * @param pageSize 每页大小
     * @param systemConfig 查询条件
     * @return 分页结果
     */
    IPage<SystemConfig> getSystemConfigPage(Integer currentPage, Integer pageSize, SystemConfig systemConfig);

    /**
     * 根据配置键获取配置值
     * @param configKey 配置键
     * @return 配置值
     */
    String getConfigValue(String configKey);

    /**
     * 根据配置键获取配置对象
     * @param configKey 配置键
     * @return 配置对象
     */
    SystemConfig getConfig(String configKey);

    /**
     * 根据配置类型获取配置列表
     * @param configType 配置类型
     * @return 配置列表
     */
    List<SystemConfig> getConfigsByType(String configType);

    /**
     * 新增系统配置
     * @param systemConfig 配置信息
     * @param currentUserId 当前操作用户ID
     * @return 操作结果
     */
    boolean addSystemConfig(SystemConfig systemConfig, Long currentUserId);

    /**
     * 更新系统配置
     * @param systemConfig 配置信息
     * @param currentUserId 当前操作用户ID
     * @return 操作结果
     */
    boolean updateSystemConfig(SystemConfig systemConfig, Long currentUserId);

    /**
     * 删除系统配置（逻辑删除）
     * @param configId 配置ID
     * @return 操作结果
     */
    boolean deleteSystemConfig(Long configId);

    /**
     * 批量删除系统配置
     * @param configIds 配置ID列表
     * @return 操作结果
     */
    boolean batchDeleteSystemConfigs(List<Long> configIds);

    /**
     * 修改配置状态
     * @param configId 配置ID
     * @param status 状态
     * @param currentUserId 当前操作用户ID
     * @return 操作结果
     */
    boolean updateConfigStatus(Long configId, Integer status, Long currentUserId);

    /**
     * 检查配置键是否存在
     * @param configKey 配置键
     * @param excludeId 排除的ID（用于更新时检查）
     * @return 存在返回true
     */
    boolean checkConfigKeyExists(String configKey, Long excludeId);

    /**
     * 刷新配置缓存
     * @return 操作结果
     */
    boolean refreshConfigCache();

    /**
     * 获取所有启用的配置（用于缓存）
     * @return 配置列表
     */
    Map<String, String> getAllEnabledConfigs();

    /**
     * 批量更新配置
     * @param configMap 配置键值对
     * @param currentUserId 当前操作用户ID
     * @return 操作结果
     */
    boolean batchUpdateConfigs(Map<String, String> configMap, Long currentUserId);
}